package com.java.oop.java_内部类_方法;

public class Animal {

    /**
     * 变量：成员变量、类变量（一定是使用 static修饰变量）、局部变量
     */

    //类变量（一定是使用 static修饰变量）
    public static int num = 5;

    //属性（成员变量）
    String breed;//品种

    String color;//颜色

    int weight;//重量

    String size;//体型

    //无参构造方法(可以不写)
    Animal(){

    }
//
//    //有参构造方法
    Animal(String breed,String color,int weight){
        this.breed = breed;
        this.color = color;
        this.weight = weight;
    }

    //实例方法
    public void setBreed(){
        breed = "kitty 猫";//固定赋值
    }

    //实例方法
    public void setBreed(String breed){
        this.breed = breed;//动态赋值
    }

    //实例方法
    public String getBreed(){
        return breed;
    }


    //行为动作
    //叫(成员方法)
    public void bark(){
        //音量(局部变量)
        int voice = 80;
        System.out.println(breed+"在叫");
    }

    //吃(成员方法)
    public void eat(){
        System.out.println(breed+"在吃");
    }

    //跑(成员方法)
    public void running(){
        System.out.println(breed+"在跑");
    }

    //跳(成员方法/类方法)
    //只能调用静态修饰的这个变量/方法
    public static void jump(){
        System.out.println(num);
    }

    /**
     * 创建匿名内部类的方法
     *
     * @return
     */
    public Cat createCat(){
        //创建对象
        Cat cat = new Cat();
        return cat;
    }


    @Override
    public String toString() {
        return "Dog{" +
                "breed='" + breed + '\'' +
                ", color='" + color + '\'' +
                ", weight=" + weight +
                ", size='" + size + '\'' +
                '}';
    }


    /**
     * Cat 称为 animal类内部类
     * 内部类其实也是拥有标准类的构成：属性和方法
     */
    public static class Cat{

        //品种
        String breed;

        //颜色
        String color;

        //重量
        int weight;

        //体型
        String size;

        /**
         * 睡觉
         */
        public void sleep(){
            System.out.println(color+breed+"在睡觉");
        }

        /**
         * 抓老鼠
         */
        public void takeMouse(){
            System.out.println(color+breed+"在抓老鼠");
        }

        /**
         * 跑
         */
        public void running(){
            System.out.println(color+breed+"在跑步");
        }


    }

}
